{% extends "layout" %}

{% block content %}
<h2>Tutoriel</h2>

<p class="info">Ceci concerne la version 0.13, qui peut différer de la version en cours de développement.</p>

<p>Prenons le cas d'une application web vieillissante que nous souhaitons étendre et refactoriser. Comme par exemple, un intranet en <em>code spaghetti</em>, consistant en un ensemble de scripts mixant HTML, PHP et SQL. Bien sûr, il s'agit d'un exemple purement théorique. Toute coïncidence avec une application existante ne serait que pur incident statistique ;).</p>

<p>Mettons que nous souhaitions commencer par ajouter un formulaire de contact, utilisant les kits <q>dj.forms</q> pour la validation et <q>simplemail</q> pour l'envoi de mail.</p>

<p>La première étape est bien sûr <a href="install">l'installation de Webappkit</a>.</p>

<p>Nous allons ensuite créer notre premier paquet.</p>

<h3>Création d'un kit</h3>

<ol>
    <li>
        <p>La méthode la plus simple est de passer par l'interface d'administration.
Sous la liste de kits, un formulaire permet la génération de la structure de base d'un paquet (un dossier et son fichier de configuration).</p>
        <p>Mettons que nous faisions preuve d'originalité et de modestie et que nous choisissions <kbd>my_great_app</kbd>.</p>
        <p class="info">Le nom doit être un identifiant PHP valide (tel que pour les variables et fonction), et tout en minuscules.</p>
    </li>
    <li>
        <p>Après validation, nous obtenons la page sommaire du paquet nouvellement créé. Ce paquet est vide et nous allons y ajouter notre première classe de librairie, <kbd>MyContactForm</kbd>.</p>
    </li>
    <li>
        <p>Cette classe étend <kbd>DjForm</kbd> et nécessite <kbd>SimpleMail</kbd>,
        chacune étant fournie par un paquet tiers. Nosu ne traiterons pas ici de l'usage de ces librairies, ni même de l'implémentation de MyContactForm.</p>
    </li>
    <li>
        <p>Nous utilisons le formulaire d'ajout de librairie pour importer le fichier de définition de classe. A sa réception, le fichier est analysé et nous pouvons retrouver notre classe et son emplacement dans la liste des classes incluses. Nosu répétons l'opération pour toutes les fichiers du paquet.</p>
        <p class="info">En PHP5, Webappkit utilise la fonction <kbd>__autoload</kbd> pour ne charger les classes que lorsqu'elles sont utilisées, et non lors de l'appel d'un kit. Il suffit de cocher <q>Charger systématiquement</q> pour désactiver ce comportement. Le fichier sera alors listé dans <kbd>[load_files]</kbd> au lieu de <kbd>[load_classes]</kbd> au sein de la <a href="howto/kit-config-file">configuration du paquet</a>.</p>
    </li>
    <li>
        <p>Il nous faut désormais définir les dépendances de paquet. Ceci se fait actuellement en éditant la section <kbd>[load_kits]</kbd> du <a href="howto/kit-config-file">fichier de configuration du paquet</a> via un formulaire intégré.</p>
        <code>[load_kits]
; identifiant du kit = "version"
dj.forms = "*"
simplemail = "*"</code>
        <p>Peu nous importe la version pour l'instant, c'est pourquoi nous utilisons le joker <kbd>*</kbd>. <kbd>dj.forms</kbd> fait ici référence au sous-paquet <q>forms</q> du paquet <q>dj</q>.</p>
    </li>
    <li>
        <p>Notre paquet est prêt. Nous pouvons désormais l'utiliser au sein de l'application. Pour cela, deux lignes de code suffisent :</p>
        <code>// chargement de webappkit
include_once('webappkit.include-me.php);

// import du paquet
Webappkit::loadKit('my_great_app');

// utilisation
$form = new MyContactForm();
        </code>
        <p>Et encore, la première ligne n'est nécessaire qu'une seule fois par script puisqu'elle charge le coeur de Webappkit.</p>
        <p>La seconde ligne chargera le paquet, et toutes ses dépendances en cascade le cas échéant.</p>
</ol>


{% endblock %}

{% block local %}
<ol class="nav">
    <li class="current">Creation d'un kit</li>
    <li><a href="tutorial/tests">Ajout de tests unitaires</a></li>
    <!--<li>Un kit comme controleur</li>
    <li>Outils vues et dblink</li>-->
</ol>

<!-- screens -->
<ol>
    <li><a href="static/screens/0.13/tutorial-1.640.png" class="lightbox">
        <img src="static/screens/0.13/tutorial-1.180.png" alt="liste des paquets" title="liste des paquets" />
    </a></li>
    <li><a href="static/screens/0.13/tutorial-2.640.png" class="lightbox">
        <img src="static/screens/0.13/tutorial-2.180.png" alt="paquet neuf" title="liste des paquets" />
    </a></li>
    <li><a href="static/screens/0.13/tutorial-3.png" class="lightbox">
        <img src="static/screens/0.13/tutorial-3.180.png" alt="MyContactForm" title="liste des paquets" />
    </a></li>
    <!--<li><a href="static/screens/0.13/tutorial-4.640.png" class="lightbox">
        <img src="static/screens/0.13/tutorial-4.180.png" alt="liste des paquets" title="liste des paquets" />
    </a></li>-->
    <li><a href="static/screens/0.13/tutorial-5.640.png" class="lightbox">
        <img src="static/screens/0.13/tutorial-5.180.png" alt="liste des paquets" title="liste des paquets" />
    </a></li>
    <li><a href="static/screens/0.13/tutorial-6.640.png" class="lightbox">
        <img src="static/screens/0.13/tutorial-6.180.png" alt="liste des paquets" title="liste des paquets" />
    </a></li>
    <li><a href="static/screens/0.13/tutorial-8.640.png" class="lightbox">
        <img src="static/screens/0.13/tutorial-8.180.png" alt="liste des paquets" title="liste des paquets" />
    </a></li>
</ol>
{% endblock %}